﻿import java.util.*;
import java.util.Date;
import java.util.Properties;
 
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
/**
 * @author zeja
 */
public class SendMail {
        private String sUsername = "";
        private String sPassword = "";
        private String sSenderAddress ="";
        private String sRecipientsAddress = ""; 
        private static String sSubject = "Test-EMail V0.9.2";
        private String sSmtpHost = "";
        private String sAuth = "";

	public SendMail(String text) {
		this(text, sSubject);
	}
	public SendMail(String text, String subject) {
		Datenbank db = new Datenbank();
		Vector<String> v = new Vector<String>();
		v = db.dbQueryEMail();
		for(int i =0; i < v.size(); i++) {
			sRecipientsAddress = (String)v.elementAt(i);		
			sendMail(sRecipientsAddress, subject, text);
		}
	}
	public void sendMail(String recipientsAddress, String subject, String text) {
		Datenbank db = new Datenbank();
		sSmtpHost = db.dbQueryConfig("mail_server");
		sUsername = db.dbQueryConfig("mail_server_user");
		sPassword = db.dbQueryConfig("mail_server_pw");
		sAuth = db.dbQueryConfig("mail_server_auth");
		sSenderAddress = db.dbQueryConfig("mail_server_sender");
	
		ComListener.debug("SENDMAIL", "DEBUG>> sendMail() sendeNachricht an " + recipientsAddress);
	        MailAuthenticator auth = new MailAuthenticator(sUsername, sPassword);
 
	        Properties properties = new Properties();
 
	        // Den Properties wird die ServerAdresse hinzugefuegt
	        properties.put("mail.smtp.host", sSmtpHost);
 
	        // !!Wichtig!! Falls der SMTP-Server eine Authentifizierung
	        // verlangt
	        // muss an dieser Stelle die Property auf "true" gesetzt
	        // werden
	        properties.put("mail.smtp.auth", sAuth);
 
	        // Hier wird mit den Properties und dem implements Contructor
	        // erzeugten
	        // MailAuthenticator eine Session erzeugt
	        Session session = Session.getDefaultInstance(properties, auth);
 
        	try {
	            // Eine neue Message erzeugen
	            Message msg = new MimeMessage(session);
	 
	            // Hier werden die Absender- und Empfaengeradressen gesetzt
	            msg.setFrom(new InternetAddress(sSenderAddress));
	            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientsAddress, false));
 
	            // Der Betreff und Body der Message werden gesetzt
	            msg.setSubject(subject);
	            msg.setText(text);
 
	            // Hier lassen sich HEADER-Informationen hinzufügen
	            msg.setHeader("Test", "Test");
	            msg.setSentDate(new Date());
 
	            // Zum Schluss wird die Mail natürlich noch verschickt
	            Transport.send(msg);
	        } catch (Exception err) {
			ComListener.debug("SENDMAIL", "ERROR>> " + err);
		}
	}
    
	class MailAuthenticator extends Authenticator {
 	        /**
	         * Ein String, der den Usernamen nach der Erzeugung eines
	         * Objektes<br>
	         * dieser Klasse enthalten wird.
	         */
	        private final String user;
 
	        /**
	         * Ein String, der das Passwort nach der Erzeugung eines
	         * Objektes<br>
	         * dieser Klasse enthalten wird.
	         */
	        private final String password;
 
	        /**
	         * Der Konstruktor erzeugt ein MailAuthenticator Objekt<br>
	         * aus den beiden Parametern user und passwort.
	         * 
	         * @param user
	         *            String, der Username fuer den Mailaccount.
	         * @param password
	         *            String, das Passwort fuer den Mailaccount.
	         */
	        public MailAuthenticator(String user, String password) {
	            this.user = user;
	            this.password = password;
	        }
 
	        /**
	         * Diese Methode gibt ein neues PasswortAuthentication
	         * Objekt zurueck.
	         * 
	         * @see javax.mail.Authenticator#getPasswordAuthentication()
	         */
	        protected PasswordAuthentication getPasswordAuthentication() {
	            return new PasswordAuthentication(this.user, this.password);
	        }
	}
    
	public static void main(String[] args) {
		new SendMail("Test");
	}
}
